﻿using System;
using System.Net;
using System.Net.Sockets;
using System.Collections.Generic;
using System.Text;
using System.Runtime;
using System.Runtime.Serialization;

namespace PickGold.Base.Net
{
	public class UdpSocket : UdpClient
	{
		private IFormatter _Formatter;

		#region ctor

		/// <summary>
		/// 初始化 System.Net.Sockets.UdpClient 类的新实例。
		/// </summary>
		/// <exception cref="System.Net.Sockets.SocketException">访问套接字时出错。有关更多信息，请参见备注部分。</exception>
		public UdpSocket() : base() { }
		/// <summary>
		/// 初始化 System.Net.Sockets.UdpClient 类的新实例。
		/// </summary>
		/// <param name="family">System.Net.Sockets.AddressFamily 值之一，它指定套接字的寻址方案。</param>
		/// <exception cref="System.ArgumentException">family 不是 System.Net.Sockets.AddressFamily.InterNetwork 或 System.Net.Sockets.AddressFamily.InterNetworkV6。</exception>
		/// <exception cref="System.Net.Sockets.SocketException">访问套接字时出错。有关更多信息，请参见备注部分。</exception>
		public UdpSocket(AddressFamily family) : base(family) { }
		/// <summary>
		/// 初始化 System.Net.Sockets.UdpClient 类的新实例，并将它绑定到所提供的本地端口号。
		/// </summary>
		/// <param name="port">要从其进行通信的本地端口号。</param>
		/// <exception cref="System.ArgumentOutOfRangeException">port 参数大于 System.Net.IPEndPoint.MaxPort 或小于 System.Net.IPEndPoint.MinPort。</exception>
		/// <exception cref="System.Net.Sockets.SocketException">访问套接字时出错。有关更多信息，请参见备注部分。</exception>
		public UdpSocket(int port) : base(port) { }
		/// <summary>
		/// 初始化 System.Net.Sockets.UdpClient 类的新实例，并将其绑定到指定的本地终结点。
		/// </summary>
		/// <param name="localEP">一个 System.Net.IPEndPoint，表示将 UDP 连接绑定到的本地终结点。</param>
		/// <exception cref="System.ArgumentNullException">localEP 为 null。</exception>
		/// <exception cref="System.Net.Sockets.SocketException">访问套接字时出错。有关更多信息，请参见备注部分。</exception>
		public UdpSocket(IPEndPoint localEP) : base(localEP) { }
		/// <summary>
		/// 初始化 System.Net.Sockets.UdpClient 类的新实例，并将它绑定到所提供的本地端口号。
		/// </summary>
		/// <param name="port">用来侦听传入的连接尝试的端口。</param>
		/// <param name="family">System.Net.Sockets.AddressFamily 值之一，它指定套接字的寻址方案。</param>
		/// <exception cref="System.ArgumentException">family 不是 System.Net.Sockets.AddressFamily.InterNetwork 或 System.Net.Sockets.AddressFamily.InterNetworkV6。</exception>
		/// <exception cref="System.ArgumentOutOfRangeException">port 大于 System.Net.IPEndPoint.MaxPort 或小于 System.Net.IPEndPoint.MinPort。</exception>
		/// <exception cref="System.Net.Sockets.SocketException">访问套接字时出错。有关更多信息，请参见备注部分。</exception>
		public UdpSocket(int port, AddressFamily family) : base(port, family) { }
		/// <summary>
		/// 初始化 System.Net.Sockets.UdpClient 类的新实例，并建立默认远程主机。
		/// </summary>
		/// <param name="hostname">要连接到的远程 DNS 主机的名称。</param>
		/// <param name="port">要连接到的远程端口号。</param>
		/// <exception cref="System.ArgumentNullException">hostname 为 null。</exception>
		/// <exception cref="System.ArgumentOutOfRangeException">port 大于 System.Net.IPEndPoint.MaxPort 或小于 System.Net.IPEndPoint.MinPort。</exception>
		/// <exception cref="System.Net.Sockets.SocketException">访问套接字时出错。有关更多信息，请参见备注部分。</exception>
		public UdpSocket(string hostname, int port) : base(hostname, port) { }

		#endregion

		public IFormatter Formatter
		{
			set
			{
				this._Formatter = value;
			}
			get
			{
				return this._Formatter;
			}
		}

		//
	}
}
